// 导出commitlint配置对象，用于校验Git提交信息格式
module.exports = {
  // 继承官方的Conventional Commits规范配置
  // 基础规则已按通用标准定义，无需重复编写
  extends: ['@commitlint/config-conventional'],

  // 自定义提交信息校验规则
  // 规则格式：[错误级别, 应用时机, 具体配置]
  // 错误级别说明：0=忽略该规则，1=不符合时警告，2=不符合时强制阻断提交
  rules: {
    // 规则1：校验提交类型（type）必须在指定列表内
    'type-enum': [
      2,                  // 错误级别：2（强制，不符合则阻断提交）
      'always',           // 应用时机：always（每次提交都校验）
      [                   // 允许的提交类型列表
        'feat',           // 新功能（例：新增用户登录组件、扩展接口功能）
        'fix',            // 修复bug（例：修复表单校验逻辑错误、修正样式显示问题）
        'docs',           // 文档修改（例：更新README说明、补充代码注释）
        'style',          // 代码格式调整（不影响逻辑，例：修正缩进、统一空格）
        'refactor',       // 代码重构（例：优化变量命名、调整函数结构，无功能新增/修复）
        'perf',           // 性能优化（例：减少循环次数、优化接口请求速度）
        'test',           // 测试相关（例：新增单元测试用例、完善集成测试）
        'chore',          // 构建/工具配置（例：更新依赖版本、修改webpack配置）
        'revert',         // 回滚版本（例：回滚到上一次正确提交，需标注回滚内容）
        'build'           // 编译/发布相关（例：调整打包输出路径、配置发布版本号）
      ]
    ],

    // 规则2：不校验提交类型（type）的大小写
    // 例：允许"Feat" "FEAT" "feat"等格式，不做强制限制
    'type-case': [0],

    // 规则3：不额外校验提交类型（type）是否为空
    // 因"type-enum"已强制type必须是指定列表值，空值会被该规则拦截，无需重复校验
    'type-empty': [0],

    // 规则4：不强制要求填写提交范围（scope）
    // 例：允许"feat: 新增弹窗组件"（无scope），也允许"feat(popup): 新增弹窗组件"（有scope）
    'scope-empty': [0],

    // 规则5：不校验提交范围（scope）的大小写
    // 例：允许"scope(Login)" "scope(login)"等格式，不做强制限制
    'scope-case': [0],

    // 规则6：不允许提交描述（subject）结尾加句号
    // 错误级别0（忽略）：仅做建议，不符合时不警告也不阻断
    'subject-full-stop': [0, 'never'],

    // 规则7：不校验提交描述（subject）的大小写
    // 例：允许"feat: Add user API" "feat: add user API"等格式，不做强制限制
    'subject-case': [0, 'never'],

    // 规则8：建议提交信息标题（header）总长度不超过72字符
    // 错误级别0（忽略）：仅做格式建议，超过时不警告也不阻断（避免标题换行混乱）
    'header-max-length': [0, 'always', 72]
  }
}